package minimumsizesubarr

// import "fmt"

// 满足其和小于等于target的长度最小的连续子数组
func minSubArrayLen(target int, nums []int) int {
	// 滑动窗口
	minWinLen := len(nums)+1  // 初始化一个极大值
	left,right := 0,0 
	curWinSum := 0  //当前窗口的和
	for left < len(nums) && right<len(nums){
		// fmt.Println(left,right,curWinSum,curWinSum+nums[right])
		if curWinSum + nums[right] < target { // 需要扩大窗口，右边界移动
			curWinSum += nums[right]
			right ++
			
		}else{
			// 刚好>=
			winLen := right-left+1
			if winLen < minWinLen {
				minWinLen = winLen
			}else{
				// 这个子数组没用，缩小
				curWinSum -= nums[left]
				left ++
			}
		}
	}
	if minWinLen == len(nums)+1{
		// 说明没有解
		return 0
	}
	return minWinLen
}